﻿#ifndef MAINWND_H
#define MAINWND_H

#include <QtGui/QMainWindow>
#include <QGraphicsView>
#include <QTabWidget>
#include <QTreeWidget>
#include <QToolButton>
#include <QAction>
#include <QProcess>
#include "ui_mainwnd.h"
#include "diagram.h"
#include "fileapi.h"
#include "inspector.h"

/*! \class mainwnd
    \brief Класс главного окна
*/
class mainwnd : public QMainWindow
{
	Q_OBJECT

public:
	/*! Конструктор
	*/
	mainwnd(QWidget *parent = 0, Qt::WFlags flags = 0);
	~mainwnd();
	

private:
    inspector *gadget;			  //!< Инспектор
    QDockWidget * dckInspector;   //!< Виджет, содержащий инспектор
	QTreeWidget *trBrowser;		  //!< Браузер диаграмм
    QDockWidget * dckBrowser;	  //!< Виджет, содержащий браузер диаграмм

	Ui::mainwndClass ui;			//!< Пользовательский интерфейс

    QString fileName;				//!< Имя файла, открытого в программе
    bool isDraft;					//!< Флаг незавершенности проекта
	int undoId;						//!< Счетчик запомненных действий
		int max_undoId;
		QDir _dir;

    QToolBar *tlbPointer;			//!< Тулбар
    QToolBar *tlbEdit;				//!< Тулбар
    QButtonGroup *btgrPointerClass;	//!< Виджет для группы кнопок тулбара
	QSlider *slScale;				//!< Виджет для масштабирования
	QAction *actResetScale;			//!< Команда возврата к 100% масштабу
	QAction *actDel;				//!< Команда удаления

	QHash<QString,diagram*> scenes; //!< Контейнер с диаграммами 
	diagram *masterDiagram;			//!< Главная диаграмма

	void createToolbars();			//!< Настройка тулбара

protected:
	void keyPressEvent ( QKeyEvent * event );	//!< Обработчик нажатия клавиш
private slots:

	void newScene(diagram *scene);		//!< Обработчик создания новой сцены
	void save();						//!< Обработчик сохранения под другим именем
	void saveAs();						//!< Обработчик сохранения под другим именем
	void finishDraft();					//!< Обработчик фиксации состояния завершения работы над диаграммой
	void newFile();						//!< Обработчик создания нового файла-диаграммы
	void load();						//!< Обработчик загрузки
	void pointerGroupClicked(int id);	//!< Обработчик нажатия на группу кнопок в тулбаре
	void showBrowser(bool);				//!< Обработчик команды показа окна браузера
	void showInspector(bool);			//!< Обработчик команды показа окна инспектора
	void scaleChanged(int);				//!< Обработчик изменения масщтаба
	void boxInserted();					//!< Обработчик вставки блока
	void linkInserted();				//!< Обработчик вставки дуги
    void deleteScene(int);				//!< Обработчик удаления сцены
	void deleteItem();					//!< Обработчик удаления элемента
	void print();						//!< Обработчик печати активной диаграмы
	void exportToPNG();					//!< Обработчик экспорта активной диаграммы в файл формата PNG
	void tabChanged();					//!< Обработчик изменения списка листов
	void resetScale();					//!< Обработчик сброса масштаба
	void selectionChanged();			//!< Обработчик изменения выделения
	void copy();						//!< Обработчик команды копировать
	void paste();						//!< Обработчик команды вставить
	void cut();							//!< Обработчик команды вырезать
	void goToDiagram(QTreeWidgetItem*);	//!< Обработчик перехода к диаграмме из брайзера диаграмм
	void closeTab(int);					//!< Обработчик закрытия листа с диаграммой
	void addToBrowser(diagram *scene);	//!< Обработчик	добавления диаграммы в браузер диаграмм
	void onUndo();						//!< Обработчик	действия отмена
	void onRedo();
	void undoSave();
	void removeFolder(QDir &dir);
};

#endif // MAINWND_H
